﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JoinBox
{
#if false
        [CommandMethod(SaveasMethodstr, CommandFlags.Session)]
        public void SaveasMethod()
        {
            var doc = Acap.DocumentManager.MdiActiveDocument;
            SaveAsMethod(doc);
        }

        /// <summary>
        /// 另存为_dwg
        /// </summary>
        public void SaveAs(Info info)
        {
            _AcapIntermediary?.Action(() =>
             {
                 SaveAsMethod(info.Document);
             });
        }

        public void SaveAsMethod(Document doc)
        {
            string dwgNewFilename = null;
            var cp = new AcadRegeditCproFile();
            string lastSavedPath = cp.Places[0].PathValue;

            // 另存为的标题:涉及了历史文件夹上面的文件夹名称,所以是不能改的
            // 历史文件夹位置: C:\Users\LQH\AppData\Roaming\Autodesk\AutoCAD 2008\R17.1\chs\Recent
            var lincunwei = "图形另存为";
            if (!Directory.Exists(lastSavedPath))
            {
                //cad的另存为最初设置的路径不知道如何设置的.
                //它会以一个dll加载过的路径?
                //但是我另存过之后,去保存到注册表上的路径,和"cad另存为"取到的路径是一样的.
                if (lastSavedPath == "History")//历史
                {
                    //从打印路径中截取这个另存为的路径,不太明白cad为什么没有设置变量-或许是我不知道呢~
                    var pr = CadSystem.Getenv("PrinterConfigDir");
                    pr = pr.Replace("plotters", null);
                    lastSavedPath = pr + "Recent\\" + lincunwei;
                    //不存在就创建
                    if (!Directory.Exists(lastSavedPath))
                    {
                        Directory.CreateDirectory(lastSavedPath);
                    }
                }
                else
                {
                    bool isPath = true;
                    foreach (var item in Enum.GetValues(typeof(Environment.SpecialFolder)))
                    {
                        if (item.ToString() == lastSavedPath)  //获取枚举的每项的名称
                        {
                            //然后把泛型又强转成枚举类型,可作为输出
                            lastSavedPath = Environment.GetFolderPath((Environment.SpecialFolder)item);
                            isPath = false;
                            break;
                        }
                    }
                    if (isPath)
                    {
                        lastSavedPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                    }
                }
            }

            var saveDwgName = GetDocName(doc);
            var sa = new Autodesk.AutoCAD.Windows.SaveFileDialog(
            lincunwei, lastSavedPath + "\\" + saveDwgName, "dwg", lincunwei,
            SaveFileDialogFlags.AllowAnyExtension | SaveFileDialogFlags.ForceDefaultFolder);
            var okno = sa.ShowDialog();
            if (okno == System.Windows.Forms.DialogResult.OK)
            {
                //储存回注册表
                lastSavedPath = Path.GetDirectoryName(sa.Filename);
                cp.Save(lastSavedPath);

                //非当前文档数据库另存为的时候发现一件很奇怪的事情,
                //另存为是成功的,但是另存的dwg不会被当前cad占用
                //要怎么产生占用呢?

                //这里怎么拿cad的用户配置格式呢?
                //cad08格式
                var dwgVersion = Autodesk.AutoCAD.DatabaseServices.DwgVersion.Current;
                if ((int)dwgVersion > 27)//大于的话用08格式,小于等于都使用当前
                {
                    dwgVersion = (Autodesk.AutoCAD.DatabaseServices.DwgVersion)27;
                }
                doc.Database.SaveAs(sa.Filename, dwgVersion);


                //另存为的时候判断如果不是当前活动图纸,就发送保存,利用保存的来实现另存,从而占用文档
                //if (true)
                //{
                //    Qsave(info);
                //}


                dwgNewFilename = sa.Filename;
            }

            if (dwgNewFilename == null)
            {
                return;
            }

            //另存为的时候可能修改文件名,所以不能用命令的方式,有了,替换掉用户的另存为命令
            //命令执行的时候是cad的线程,需要跨线程
            //var name = Thread.CurrentThread.Name;
            ((DocWindow)JoinBox.WPF.多文档标签.AutoDocs.JAnchor?.EmbedDoWPF?.UserControl)?.Action(WPF =>
            {
                foreach (var info in WPF.TabData.Infos)
                {
                    if (info.Document == doc)
                    {
                        info.InfoDocName = GetDocName(doc);
                        info.Document = doc;//实现WPF更新
                    }
                }
            });
        }

#endif

}
